#pragma once

#include <OgreRoot.h>
#include <OgreCamera.h>
#include <OgreViewport.h>
#include <OgreSceneManager.h>
#include <OgreRenderWindow.h>
#include <OgreWindowEventUtilities.h>

#include <OISEvents.h>
#include <OISInputManager.h>
#include <OISKeyboard.h>
#include <OISMouse.h>

#include <boost/smart_ptr.hpp>

class BasicTutorial6 : public Ogre::WindowEventListener, public Ogre::FrameListener {
private:
    boost::scoped_ptr<Ogre::Root> mRoot;
    Ogre::String mPluginsCfg;
    Ogre::String mResourcesCfg;

    Ogre::RenderWindow *mWindow;
    Ogre::SceneManager *mSceneMgr;
    Ogre::Camera *mCamera;

    OIS::InputManager *mInputManager;
    OIS::Mouse *mMouse;
    OIS::Keyboard * mKeyboard;
private:
    virtual void windowResized(Ogre::RenderWindow *rw);
    virtual void windowClosed(Ogre::RenderWindow *rw);

    virtual bool frameRenderingQueued(const Ogre::FrameEvent &evt);
public:
    BasicTutorial6(void);
    virtual ~BasicTutorial6(void);
    bool go(void);
};
